#ifndef __LINKED_STACK_H__
#define __LINKED_STACK_H__

#include <stddef.h>

/* 错误码定义 */
typedef enum {
    STACK_SUCCESS = 0,      // 操作成功
    STACK_ERR_NULL_PTR,     // 空指针错误
    STACK_ERR_EMPTY,        // 栈空操作错误
    STACK_ERR_MALLOC_FAIL,  // 内存分配失败
    STACK_ERR_INVALID_SIZE  // 无效大小
} StackStatus;

typedef struct node {
    void *data;
    struct node *next;
} Node;

typedef struct linked_stack_t {
    Node *top;
    size_t elem_size;    // 每个元素的大小
    size_t nmemb;        // 当前元素个数
} Stack;

/* 基本操作接口 */
StackStatus stack_init(Stack **st, size_t elem_size);
int stack_empty(const Stack *st);
size_t stack_nmemb(const Stack *st);
StackStatus stack_pop(Stack *st);
StackStatus stack_top(const Stack *st, void *data);
StackStatus stack_push(Stack *st, const void *data);
void stack_destroy(Stack **st);

#endif // __LINKED_STACK_H__